]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st_label_set_text: no-op if the text is unchanged
authorDan Winship <danw@gnome.org>
Tue, 5 Apr 2011 20:17:52 +0000 (16:17 -0400)
committerDan Winship <danw@gnome.org>
Mon, 11 Apr 2011 18:00:16 +0000 (14:00 -0400)
If a caller sets an StLabel's text to what it already is (as, eg, the
clock menu does), do nothing. Unless the label is editable, in which
case, setting the text has a visible side effect (dropping the
selection), so we don't optimize that out.

https://bugzilla.gnome.org/show_bug.cgi?id=645648

src/st/st-label.c

index 1d9b13d0e2caaad722ac75828c5c6da123eac664..ce1130498dd3d54c60752192f3e1504491bbbb71 100644 (file)
@@ -376,21 +376,27 @@ st_label_set_text (StLabel     *label,
                    const gchar *text)
 {
   StLabelPrivate *priv;
+  ClutterText *ctext;
 
   g_return_if_fail (ST_IS_LABEL (label));
   g_return_if_fail (text != NULL);
 
   priv = label->priv;
+  ctext = CLUTTER_TEXT (priv->label);
 
-  if (priv->text_shadow_material != COGL_INVALID_HANDLE)
+  if (clutter_text_get_editable (ctext) ||
+      g_strcmp0 (clutter_text_get_text (ctext), text) != 0)
     {
-      cogl_handle_unref (priv->text_shadow_material);
-      priv->text_shadow_material = COGL_INVALID_HANDLE;
-    }
+      if (priv->text_shadow_material != COGL_INVALID_HANDLE)
+        {
+          cogl_handle_unref (priv->text_shadow_material);
+          priv->text_shadow_material = COGL_INVALID_HANDLE;
+        }
 
-  clutter_text_set_text (CLUTTER_TEXT (priv->label), text);
+      clutter_text_set_text (ctext, text);
 
-  g_object_notify (G_OBJECT (label), "text");
+      g_object_notify (G_OBJECT (label), "text");
+    }
 }
 
 /**